In a computing environment using distributed storage, computer storage may be provided to one or more users or applications using a highly abstracted infrastructure. This means that the characteristics and locations of the disk drives, storage arrays, and servers where the actual storage takes place are typically hidden from the user or application accessing the storage. The user or application accesses the distributed storage by referencing its symbolic or virtual location, and the distributed storage system automatically translates the virtual location into a physical location where the requested storage is actually stored and forwards the storage request to the physical device at that location. This allows the vendor providing the storage to exercise extensive flexibility in deciding how and where to implement the storage as the distributed storage system may simply change how it translates the virtual location requested by the user or application. This includes the ability to move storage from one storage device to another to address capacity, workload, and/or other requirements. These changes in implementation details are often hidden or transparent from the application or the user, which access the storage by making storage requests using an interface, such as an application programming interface (API), and providing the virtual location information for the requested storage. These virtualized and/or abstracted features of distributed storage systems may make them useful in cloud computing systems.
And while distributed storage provides great flexibility to the storage provider, it often comes with some cost to the application or user. For example, distributed storage is typically accessed over a network, such as the Internet. This may add significant overhead to storage requests as both the storage request and the response to the storage request may have to travel across the network. At a minimum this introduces latency or delay in the handling of the storage requests. One possible solution to reduce this latency or delay is through the use of a host-side cache. With a host-side cache, a higher speed storage device is installed into the host where the storage requests are being made. The host-side cache is used to store data from recent storage requests so that follow-up requests to the same storage may be more rapidly handled by the host-side cache, rather than requiring the more latency inducing round trip across the network. As storage requests are processed at the host, the host-side cache is checked before forwarding the storage request across the network. As with the rest of the distributed storage handling, the presence and use of the host-side cache is transparent to the user or the application, which continue to make storage requests normally.
Caching systems, such as the host-side cache, are typically implemented as a way to improve the responsiveness of a system. They are based on the general observation that once a storage request is made for a particular block of storage, a follow-up request within that same block of storage is more likely than not to occur in the near future. The caching systems typically apply the same caching rule to each block of storage and use a cache-replacement policy, such as least-recently used (LRU or LRU-K) or least-frequently used (LFU), to select which previously cached block of storage is to be overwritten when the cache becomes full. In the case of distributed storage, this model is not as effective as it is with memory systems. Distributed storage systems are often subject to storage requests that receive little or no benefit from host-side caching, where large sequential accesses that do not generally result in follow-up requests to the same blocks of storage in the near future are common.
Accordingly, it would be desirable to provide improved methods and systems for managing host-side caches in storage systems.
In the figures, elements having the same designations have the same or similar functions.